package com.boot.proxy;

import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * @Package com.boot.proxy.org.springframework.cglib
 */
public class CglibInterceptor implements MethodInterceptor {
    private Object target;

    public CglibInterceptor(Object target) {
        this.target=target;
    }

    /**
     * obj：cglib生成的代理对象
     * method：被代理对象方法
     * args：方法入参
     * methodProxy: 代理方法
     */
    @Override
    public Object intercept(Object obj, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
        System.out.println("start........");
        long t =System.currentTimeMillis();
        //Object invoke = method.invoke(target, args);//方法执行，参数：target 目标对象 arr参数数组
        Object invoke = methodProxy.invokeSuper(obj, args);//如果被代理的类有内部调用  可以增强  如果方法是private 的话都不能增强
        //Object invoke = methodProxy.invoke(target, args);//如果被代理的类有内部调用  只有调用方法增强 内部调用不可以增强

        System.out.println(System.currentTimeMillis() - t);
        System.out.println("end........");
        return invoke;
    }
}
